package com.ssy.lingxi.order.service.platform;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.model.dto.OrderMemberQueryDTO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderProcessIdVO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderProcessUpdateStatusVO;
import com.ssy.lingxi.order.model.vo.platform.request.PlatformProcessMemberPageVO;
import com.ssy.lingxi.order.model.vo.platform.request.PlatformProcessUpdateVO;
import com.ssy.lingxi.order.model.vo.platform.request.PlatformProcessVO;
import com.ssy.lingxi.order.model.vo.platform.request.PlatfromProcessPageVO;
import com.ssy.lingxi.order.model.vo.platform.response.PlatformBaseTradeProcessVO;
import com.ssy.lingxi.order.model.vo.platform.response.PlatformProcessDetailVO;
import com.ssy.lingxi.order.model.vo.platform.response.PlatformProcessPageQueryVO;
import com.ssy.lingxi.order.model.vo.process.response.BaseTradeProcessVO;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 平台后台 - 交易规则配置相关接口
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-26
 */
public interface IPlatformTradeProcessService {
    /**
     * 分页查询交易流程规则配置
     * @param headers HttpHeaders信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<PlatformProcessPageQueryVO>> pageTradeProcess(HttpHeaders headers, PlatfromProcessPageVO pageVO);

    /**
     * 新增交易规则页面 - 查询基础交易流程列表
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<List<PlatformBaseTradeProcessVO>> listBaseTradeProcess(HttpHeaders headers);

    /**
     * 新增交易流程规则
     * @param headers HttpHeaders信息
     * @param processVO 接口参数
     * @return 新增结果
     */
    Wrapper<Void> createTradeProcess(HttpHeaders headers, PlatformProcessVO processVO);

    /**
     * 查询交易流程规则详情
     * @param headers HttpHeaders信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<PlatformProcessDetailVO> getTradeProcess(HttpHeaders headers, OrderProcessIdVO idVO);

    /**
     * 分页查询交易流程规则适用会员列表
     * @param headers HttpHeaders信息
     * @param pageVO  接口参数
     * @return 查询结果
     */
    Wrapper<PageData<OrderMemberQueryDTO>> pageTradeProcessMembers(HttpHeaders headers, PlatformProcessMemberPageVO pageVO);

    /**
     * 修改交易流程规则
     * @param headers HttpHeaders信息
     * @param updateVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateTradeProcess(HttpHeaders headers, PlatformProcessUpdateVO updateVO);

    /**
     * 修改交易流程规则状态
     * @param headers HttpHeaders信息
     * @param statusVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateTradeProcessStatus(HttpHeaders headers, OrderProcessUpdateStatusVO statusVO);

    /**
     * 删除交易流程规则
     * @param headers HttpHeaders信息
     * @param idVO 接口参数
     * @return 删除结果
     */
    Wrapper<Void> deleteTradeProcess(HttpHeaders headers, OrderProcessIdVO idVO);

    /**
     * 系统能力 - 新增交易流程规则配置时，根据平台后台的配置查询基础交易流程列表
     * @param memberId 会员Id
     * @param roleId   会员角色Id
     * @return  查询结果
     */
    List<BaseTradeProcessVO> listOrderTradeProcess(Long memberId, Long roleId);
}
